﻿#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
#include "tree.h"
//typedef int Qdatatype;
typedef struct TreeNode* Qdatatype;

typedef struct Qnode
{
	Qdatatype  data;
	struct Qnode* next;
}Qnode;

typedef struct Queue
{
	Qnode* head;
	Qnode* tail;
	int size;
}Queue;

//队列的初始化
void Qinit(Qnode* ps);
//打印数据
void Printf(Queue* ps);

//数据入队列
void Qpush(Queue* ps, Qdatatype x);
//数据出队列
void Qpop(Queue* ps);

//取队头数据
Qdatatype getFrontdata(Queue* ps);
//取队尾数据
Qdatatype getBackdata(Queue* ps);

//判断队列是否为空
bool Empty(Queue* ps);
//获取队列的有效数据个数
int get(Queue* ps);

//层序遍历
void LevelOrder(TreeNode* root);
//队列的销毁
void QueueDestroy(Queue* pq);

// 判断⼆叉树是否是完全⼆叉树
bool BinaryTreeComplete(TreeNode* root);


